package com.asteroids.game;

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.view.KeyEvent;
import android.view.MotionEvent;

public class GameSurfaceView extends GLSurfaceView {

	 private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
    private GameRenderer mRenderer;
    private float mPreviousX;
    private float mPreviousY;
	
	public GameSurfaceView(Context context) {
		super(context);

		mRenderer = new GameRenderer();
		setRenderer(mRenderer);
		
		//Set the Renderer for drawing on the GLSurfaceView
		//setRenderer(new AndroidzRenderer());
		
		// Render the view only when there is a change
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent e){
		// MotionEvent reports input details from the touch screen
        // and other input controls. In this case, you are only
        // interested in events where the touch position changed.
		
		float x = e.getX();
        float y = e.getY();
        
        switch (e.getAction()) {
        case MotionEvent.ACTION_MOVE:

            float dx = x - mPreviousX;
            float dy = y - mPreviousY;

            // reverse direction of rotation above the mid-line
            if (y > getHeight() / 2) {
              dx = dx * -1 ;
            }

            // reverse direction of rotation to left of the mid-line
            if (x < getWidth() / 2) {
              dy = dy * -1 ;
            }
          
            mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;
            requestRender();
    	}

        mPreviousX = x;
        mPreviousY = y;
		return true;
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event)  {
	    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
	    	
	        return true;
	    }

	    return super.onKeyDown(keyCode, event);
	}
	
}
